

#ifndef UC_GEBLOCK2D_H
#define UC_GEBLOCK2D_H

#include "zgeent2d.h"
#pragma pack (push, 8)
class UcGePoint2d;
class UcGeVector2d;

class 
GE_DLLEXPIMPORT
UcGeBoundBlock2d : public UcGeEntity2d
{
public:
                    
	UcGeBoundBlock2d ();
	UcGeBoundBlock2d (const UcGePoint2d& point1, const UcGePoint2d& point2);
	UcGeBoundBlock2d (const UcGePoint2d& base,
                      const UcGeVector2d& dir1, const UcGeVector2d& dir2);
	UcGeBoundBlock2d (const UcGeBoundBlock2d& block);

    void              getMinMaxPoints  (UcGePoint2d& point1,
								        UcGePoint2d& point2) const;
    void              get              (UcGePoint2d& base,
								        UcGeVector2d& dir1,
								        UcGeVector2d& dir2) const;

    UcGeBoundBlock2d& set         (const UcGePoint2d& point1,
                                   const UcGePoint2d& point2);
    UcGeBoundBlock2d& set         (const UcGePoint2d& base,
                                   const UcGeVector2d& dir1,
                                   const UcGeVector2d& dir2);

    UcGeBoundBlock2d& extend      (const UcGePoint2d& point);

    UcGeBoundBlock2d& swell       (double distance);

    ZSoft::Boolean    contains    (const UcGePoint2d& point) const;
    ZSoft::Boolean    isDisjoint  (const UcGeBoundBlock2d& block)
                                                 const;

    UcGeBoundBlock2d& operator =  (const UcGeBoundBlock2d& block);

	ZSoft::Boolean    isBox     () const;
	UcGeBoundBlock2d& setToBox  (ZSoft::Boolean);
};

#pragma pack (pop)
#endif
